// @copyright 2017-2018 zzu_softboy <zzu_softboy@163.com>
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Created by softboy on 2018/05/17.

#include "gtest/gtest.h"
#include "pdk/kernel/CoreApplication.h"
#include "pdk/base/os/process/Process.h"
#include "pdk/base/os/thread/Thread.h"
#include "pdktest/PdkTest.h"
#include "pdk/base/lang/String.h"

using pdk::os::process::Process;
using pdk::kernel::CoreApplication;
using pdk::os::thread::Thread;
using pdk::lang::Latin1String;

TEST(ProcessNoApplication, testInitializationDeadlock)
{
   struct MyThread : public Thread
   {
      void run()
      {
         // what we execute does not matter, as long as we try to
         // and that the process exits
         Process::execute(Latin1String("true"));
      }
   };
   
   char *argv[] = { const_cast<char*>("ProcessNoApplication"), 0 };
   int argc = 1;
   CoreApplication app(argc, argv);
   MyThread thread;
   thread.start();
   ASSERT_TRUE(thread.wait(10000));
}
